// 云对象教程: https://uniapp.dcloud.net.cn/uniCloud/cloud-obj
// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
module.exports = {
  _before: function () {
    // 通用预处理器
  },
  /**
   * method1方法描述
   * @param {string} param1 参数1描述
   * @returns {object} 返回值描述
   */
  /* 
	method1(param1) {
		// 参数校验，如无参数则不需要
		if (!param1) {
			return {
				errCode: 'PARAM_IS_NULL',
				errMsg: '参数不能为空'
			}
		}
		// 业务逻辑
		
		// 返回结果
		return {
			param1 //请根据实际需要返回值
		}
	}
	*/

  /**
   * 发布内容
   * @param {object} params 发布参数
   * @param {string} params.userId 用户ID
   * @param {string} params.userAvatar 用户头像URL
   * @param {string} params.title 标题
   * @param {string} params.content 内容
   * @param {Array} [params.images] 图片URL数组
   * @returns {object} 发布结果
   */
  async publish(params) {
    const { userId, userAvatar, title, content, images } = params;

    // 参数校验
    if (!userId || !userAvatar || !title || !content) {
      return {
        errCode: 'PARAM_IS_NULL',
        errMsg: '必填参数不能为空',
      };
    }

    // 获取数据库引用
    const db = uniCloud.database();

    // 创建发布记录
    try {
      const result = await db.collection('publications').add({
        userId,
        userAvatar,
        title,
        content,
        images: images || [],
        createTime: new Date(),
      });

      return {
        errCode: 0,
        errMsg: '发布成功',
        id: result.id,
      };
    } catch (err) {
      return {
        errCode: 'PUBLISH_FAILED',
        errMsg: '发布失败: ' + err.message,
      };
    }
  },

  /**
   * 更新已发布的内容
   * @param {string} id 要更新的发布内容ID
   * @param {string} userId 用户ID
   * @param {string} title 更新后的标题
   * @param {string} content 更新后的内容
   * @param {Array} images 更新后的图片URL数组
   * @returns {object} 更新结果
   */
  async updatePublication(params) {
    const { id, userId, title, content, images } = params;
    // 参数校验
    if (!id || !userId || !title || !content) {
      return {
        errCode: 'PARAM_IS_NULL',
        errMsg: '必填参数不能为空',
      };
    }

    // 获取数据库引用
    const db = uniCloud.database();

    // 更新发布记录
    try {
      // 首先检查该发布是否存在且属于该用户
      const publication = await db.collection('publications').doc(id).get();
      if (!publication.data || publication.data.length === 0) {
        return {
          errCode: 'PUBLICATION_NOT_FOUND',
          errMsg: '未找到该发布内容',
        };
      }
      if (publication.data[0].userId !== userId) {
        return {
          errCode: 'NO_PERMISSION',
          errMsg: '您没有权限更新此内容',
        };
      }

      // 执行更新操作
      const result = await db
        .collection('publications')
        .doc(id)
        .update({
          title,
          content,
          images: images || [],
          updateTime: new Date(),
        });

      if (result.updated === 1) {
        return {
          errCode: 0,
          errMsg: '更新成功',
        };
      } else {
        return {
          errCode: 'UPDATE_FAILED',
          errMsg: '更新失败',
        };
      }
    } catch (err) {
      return {
        errCode: 'UPDATE_FAILED',
        errMsg: '更新失败: ' + err.message,
      };
    }
  },

  /**
   * 查询发布内容详情
   * @param {string} id 发布内容ID
   * @returns {object} 查询结果
   */
  async getPublicationDetail(id) {
    // 参数校验
    if (!id) {
      return {
        errCode: 'PARAM_IS_NULL',
        errMsg: '发布ID不能为空',
      };
    }

    // 获取数据库引用
    const db = uniCloud.database();

    try {
      // 查询发布记录
      const result = await db.collection('publications').doc(id).get();

      if (!result.data || result.data.length === 0) {
        return {
          errCode: 'PUBLICATION_NOT_FOUND',
          errMsg: '未找到该发布内容',
        };
      }

      // 返回查询结果
      return {
        errCode: 0,
        errMsg: '查询成功',
        data: result.data[0],
      };
    } catch (err) {
      return {
        errCode: 'QUERY_FAILED',
        errMsg: '查询失败: ' + err.message,
      };
    }
  },
  /**
   * 获取所有发布内容列表
   * @param {number} page 页码
   * @param {number} limit 每页数量
   * @returns {object} 发布内容列表
   */
  async getPublicationAllList(params) {
    const { page, limit } = params;
    const db = uniCloud.database();
    const result = await db
      .collection('publications')
      .skip((page - 1) * limit)
      .limit(limit)
      .get();
    return result;
  },
  /**
   * 获取用户发布的所有内容列表
   * @param {string} userId 用户ID
   * @param {number} page 页码
   * @param {number} limit 每页数量
   * @returns {object} 发布内容列表
   */
  async getPublicationListByUserId(userId, page, limit) {
    const db = uniCloud.database();
    const result = await db
      .collection('publications')
      .where({ userId })
      .skip((page - 1) * limit)
      .limit(limit)
      .get();
    return result;
  },
};
